#pragma once
#include <cmath>

struct Vec2
{
	float x = 0, y = 0;
	Vec2() {};
	Vec2(float x, float y): x(x), y(y) {}
	Vec2(const Vec2& vec) : x(vec.x), y(vec.y) {}

	void rotate90()
	{
		float t = x;
		x = -y;
		y = t;
	}

	float lengthSq()
	{
		return x * x + y * y;
	}

	float length()
	{
		return sqrt(lengthSq());
	}

	Vec2 normal()
	{
		return *this / length();
	}

	Vec2 operator+(Vec2& rhs)
	{
		return Vec2(x + rhs.x, y + rhs.y);
	}

	void operator+=(Vec2& rhs)
	{
		x += rhs.x;
		y += rhs.y;
	}

	Vec2 operator-(Vec2& rhs)
	{
		return Vec2(x - rhs.x, y - rhs.y);
	}

	void operator-=(Vec2& rhs)
	{
		x -= rhs.x;
		y -= rhs.y;
	}

	Vec2 operator*(float scalar)
	{
		return Vec2(x * scalar, y * scalar);
	}

	void operator*=(float scalar)
	{
		x *= scalar;
		y *= scalar;
	}

	Vec2 operator/(float scalar)
	{
		return Vec2(x / scalar, y / scalar);
	}

	void operator/=(float scalar)
	{
		x /= scalar;
		y /= scalar;
	}

	float operator*(Vec2& rhs)
	{
		return x * rhs.x + y * rhs.y;
	}
};

//template<typename T>
//struct Vec2t
//{
//	T x = 0, y = 0;
//	Vec2t() {};
//	Vec2t(T x, T y): x(x), y(y) {}
//	Vec2t(const Vec2& vec) : x(vec.x), y(vec.y) {}
//
//	void rotate90()
//	{
//		T t = x;
//		x = -y;
//		y = t;
//	}
//
//	T lengthSq()
//	{
//		return x * x + y * y;
//	}
//
//	Vec2t normal()
//	{
//		return *this / length();
//	}
//
//	Vec2t operator+(Vec2t& rhs)
//	{
//		return Vec2(x + rhs.x, y + rhs.y);
//	}
//
//	void operator+=(Vec2t& rhs)
//	{
//		x += rhs.x;
//		y += rhs.y;
//	}
//
//	Vec2 operator-(Vec2t& rhs)
//	{
//		return Vec2(x - rhs.x, y - rhs.y);
//	}
//
//	void operator-=(Vec2t& rhs)
//	{
//		x -= rhs.x;
//		y -= rhs.y;
//	}
//
//	Vec2 operator*(T scalar)
//	{
//		return Vec2(x * scalar, y * scalar);
//	}
//
//	void operator*=(T scalar)
//	{
//		x *= scalar;
//		y *= scalar;
//	}
//
//	Vec2 operator/(T scalar)
//	{
//		return Vec2(x / scalar, y / scalar);
//	}
//
//	void operator/=(T scalar)
//	{
//		x /= scalar;
//		y /= scalar;
//	}
//
//	T operator*(Vec2& rhs)
//	{
//		return x * rhs.x + y * rhs.y;
//	}
//};